/*
 * @description:
 * @Author: Peng_Yong
 * @Date: 2023-08-18 17:48:43
 * @LastEditors: James324
 * @LastEditTime: 2024-03-21 15:34:53
 */
import type { Result } from '@/service/request/type';
import type { FormProps, FormItemProps, TableProps, TableColumnCtx } from 'element-plus';

export interface ColumnProps extends TableColumnCtx<any> {
    customRequired: boolean; // 待补充
    cellClassName: string; // 表格单元格样式类名
}
export interface TableColumnConfig extends ItemConfig {
    [key: string]: any;
    slotName?: string;
    sortItem?: boolean | 'custom'; // 用于判断是否是排序表格
    formItemProps?: Partial<FormItemProps>;
    columnProps?: Partial<ColumnProps>; // 用于定义 el-table-column 的 props 属性
    filter?: boolean;
    noEdit?: boolean; // 表格项直接回显，不作为编辑模式处理
    fixed?: boolean; // 是否固定列
}
export interface BaseTableConfig {
    items: Array<TableColumnConfig>;
    tableProps?: Partial<TableProps<any>>; // 用于定义 el-table 的 props 属性，作用与 config.json 中的 属性定义
    unAction?: boolean;
    unSelection?: boolean;
    unIndex?: boolean;
    indexFixed?: boolean; // 序列号是否固定
    expand?: boolean;
    formProps?: Partial<FormProps>; // form表单的配置同 element plus form
    actionProps?: Partial<TableColumnCtx<any>>; // 用于操作列的选项控制
    modalActionShow?: boolean; // 隐藏表格操作列
    disabeldAdd?: boolean; // 禁用添加行功能
}

export interface BaseTableProps {
    tableConfig: BaseTableConfig;
    tableKey?: number | string; // 当前表格 key 值，用于需要数据更新后刷新表格时
    height?: number | string;
    bodyRowHeight?: string; // 表格内容行高
    border?: boolean; // 开启表格宽度拖拽功能
    lineEdit?: boolean;
    addTableRow?: boolean;
    showPage?: boolean;
    showSetting?: boolean;
    tableAttr?: BaseTableConfig['tableProps']; // 用于定义 el-table 的 props 属性，与 tableConfig.tableProps 作用相同，只是这个作用与标签调用属性
    addedParams?: anyObj;
    editableKeys?: string[];
    closeEdit?: boolean;
    refreshCacheData?: boolean; // 刷新缓存组件表格的数据
    initOnceSticky?: boolean; // 初始化一次吸顶效果，只在元素挂载 mount 阶段执行一次。
    mode?: string;
    addTip?: string;
    modalMode?: boolean; // 【 弹框模式， 普通模式 】
    id?: string;
    hideDel?: boolean;
    unAction?: boolean; // 隐藏操作列
    cellEdit?: boolean; //TODO: 需要优化再外面使用插槽
    maxAddNum?: number;
    closeDelRow?: boolean;
    openSticky?: boolean; // 打开头部操作按钮行吸顶模式
    showFullScreen?: boolean; // 展示全屏按钮
    customTableData?: boolean; // 自定义表格数据
    selectionWidth?: string; // 选择框宽度 默认：40
    actionWidth?: string; // 操作项宽度 默认：160
    validPopoverPosition?: 'center' | 'left'; // 校验错误提示框显示位置
    beforeAddValidFn?: () => boolean; // 添加行前置钩子
    editDisabledFn?: (row: any) => boolean; // 是否禁用编辑按钮
    delDisabledFn?: (row: any) => boolean;
    selectable?: (item: any, index: number) => boolean;
    handleTableData?: (params: any) => any[];
    maxHeight?: () => number | string;
    getDataFn?: (params: any) => Promise<Result | any>;
    customDataKey?: string;
    pZIndex?: number;
}

export interface TableHeight {
    modalMode?: boolean;
    addTableRow?: boolean;
    id: string;
    maxHeight?: () => number | string;
}
